package clases.contabilidad;

import clases.incio.Paginacion;
import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Ejercicio {

    private int idejercicio;
    private String ejercicio;
    private String fechainicio;
    private String fechafinal;
    private String sql;
    private final DataSource dt;
    public Paginacion objPaginacion;

    public int getIdejercicio() {
        return idejercicio;
    }

    public void setIdejercicio(int idejercicio) {
        this.idejercicio = idejercicio;
    }

    public String getEjercicio() {
        return ejercicio;
    }

    public void setEjercicio(String ejercicio) {
        this.ejercicio = ejercicio;
    }

    public String getFechainicio() {
        return fechainicio;
    }

    public void setFechainicio(String fechainicio) {
        this.fechainicio = fechainicio;
    }

    public String getFechafinal() {
        return fechafinal;
    }

    public void setFechafinal(String fechafinal) {
        this.fechafinal = fechafinal;
    }

    public Ejercicio() {
        dt = new DataSource();
        objPaginacion = new Paginacion();
    }

    /**
     * Metodo que cambia el estado de los ejercicio, de true a false
     */
    private void cambiarestado() {
        sql = "UPDATE EJERCICIO SET ESTADO=FALSE WHERE ESTADO=TRUE";
        Sql.actualizar(sql);
    }

    /**
     * Metodo que guarda el ejercicio
     *
     * @return
     */
    public boolean guardarEjercicio() {
        if (this.ExistenciaEjercicio() == true) {
            Dialogos.Error("El ejercicio ya existe...");
            return false;
        } else {
            this.cambiarestado();
            this.idejercicio = Sql.getMax("idejercicio", "ejercicio", true);
            sql = "INSERT INTO EJERCICIO VALUES (" + this.idejercicio + ", '" + this.ejercicio + "',"
                    + " to_date('" + this.fechainicio + "', 'dd/mm/yyyy'), "
                    + " to_date('" + this.fechafinal + "', 'dd/mm/yyyy'), " + true + ")";
            if (Sql.insertar(sql) == true) {
                Dialogos.GuardadoconExito();
                return true;
            } else {
                Dialogos.Error("Error al guardar los datos");
                return false;
            }
        }

    }

    public boolean actualizarEjercicio() {
        sql = "UPDATE EJERCICIO SET EJERCICIO='" + this.ejercicio + "', FECHAINICIO='" + this.fechainicio + "',"
                + " FECHAFIN='" + this.fechafinal + "' WHERE IDEJERCICIO='" + this.idejercicio + "'";
        if (Sql.actualizar(sql) == true) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizado correctamente", 1);
            return true;
        } else {
            Dialogos.Error("Error al actualizar los datos");
            return false;
        }

    }

    public boolean EliminarEjercicio(String ejercicio) {
        if (Sql.isExiste("SELECT * FROM EJERCICIO WHERE IDEJERCICIO IN "
                + "(SELECT IDEJERCICIO FROM ASIENTO) AND EJERCICIO='" + ejercicio + "'") == true) {
            Dialogos.Error("El ejercicio ya esta contabilizado... No se puede eliminar");
            return false;
        } else if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar el ejercicio?") == true) {
            Sql.eliminar("DELETE FROM EJERCICIO WHERE IDEJERCICIO NOT IN "
                    + "(SELECT IDEJERCICIO FROM ASIENTO) AND EJERCICIO='" + ejercicio + "'");
            return true;
        }

        return false;
    }

    public boolean ExistenciaEjercicio(String ejercicio) {
        sql = "SELECT * FROM EJERCICIO WHERE EJERCICIO='" + ejercicio + "' AND EJERCICIO!='" + this.ejercicio + "'";
        return Sql.isExiste(sql);
    }

    public boolean ExistenciaEjercicio() {
        sql = "SELECT * FROM EJERCICIO WHERE EJERCICIO='" + ejercicio + "'";
        return Sql.isExiste(sql);
    }

    public String SqlGeneral() {
        sql = "SELECT EJERCICIO, TO_CHAR(FECHAINICIO, 'DD/MM/yyyy'), "
                + "TO_CHAR(FECHAFIN, 'DD/MM/yyyy'), ESTADO "
                + "FROM EJERCICIO ORDER BY (IDEJERCICIO) DESC";
        return sql;
    }
    
    public String SqlBuscar() {
        sql = "SELECT EJERCICIO, ESTADO FROM EJERCICIO "
                + "ORDER BY (IDEJERCICIO) DESC";
        return sql;
    }

    public String SqlBuscar(String buscar) {
        sql = "SELECT EJERCICIO, FECHAINICIO, FECHAFIN, ESTADO FROM EJERCICIO"
                + " WHERE EJERCICIO LIKE ('" + buscar + "%') ORDER BY (IDEJERCICIO) DESC";
        return sql;
    }
    
    public String SqlConsulta(String buscar) {
        sql = "SELECT EJERCICIO, ESTADO FROM EJERCICIO "
                + "WHERE EJERCICIO LIKE ('" + buscar + "%') "
                + "ORDER BY (IDEJERCICIO) DESC";
        return sql;
    }

    public void ConsultaEjercicio(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("EJERCICIO");
        modelo.addColumn("FECHA INICIO");
        modelo.addColumn("FECHA FIN");
        modelo.addColumn("ESTADO");
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(150);
        sql = objPaginacion.getPaginacion(sql, pagina, 24);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[4];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            fila[3] = this.CambiarBoolean(dt.getString(4));
            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }
    
    
    public void BuscarEjercicio(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("EJERCICIO");
        modelo.addColumn("ESTADO");
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(150);
        sql = objPaginacion.getPaginacion(sql, pagina, 15);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[2];
            fila[0] = dt.getString(1);
            fila[1] = this.CambiarBoolean(dt.getString(2));
            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void llenardatosEjercicio(String ejercicio) {
        sql = "SELECT IDEJERCICIO, EJERCICIO, TO_CHAR(FECHAINICIO, 'DD/MM/yyyy'), "
                + "TO_CHAR(FECHAFIN, 'DD/MM/yyyy') "
                + "FROM EJERCICIO WHERE EJERCICIO='"+ejercicio+"'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idejercicio = dt.getInt(1);
            this.ejercicio = dt.getString(2);
            this.fechainicio = dt.getString(3);
            this.fechafinal = dt.getString(4);
        }
    }

    public boolean cambiarEjercicio(String ejercicio) {
        sql = "SELECT IDEJERCICIO, EJERCICIO FROM EJERCICIO WHERE EJERCICIO='" + ejercicio + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idejercicio = dt.getInt(1);
            this.ejercicio=dt.getString(2);
        }
        this.cambiarestado();
        sql = "UPDATE EJERCICIO SET ESTADO=TRUE WHERE IDEJERCICIO=" + this.idejercicio + "";
        if (Sql.actualizar(sql) == true) {
            global.Mensajes.mostrarMensaje("Correcto!", ""+this.ejercicio+" activado correctamente...",1);
            return true;
        } else {
            Dialogos.Error("Error al cambiar de ejercicio");
            return false;

        }
    }

    public boolean EjercicioActivo() {
        sql = "SELECT * FROM EJERCICIO WHERE ESTADO=TRUE";
        Sql.getConsulta(sql, dt);
        return Sql.getTotalRegistros(dt) != 0;
    }

    public String CambiarBoolean(String dato) {
        if (dato.equals("t")) {
            return "Activo";
        } else {
            return "Inactivo";
        }
    }

}
